package com.guisu.material

import android.app.Activity
import android.graphics.Color
import android.os.Build
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager

object StatusBarUtil {

    /**
     * 为 activity 的状态栏设置颜色
     */
    fun setStatusColor(activity: Activity, color: Int) {
        // 5.0 以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // 直接调用系统提供的方法
            activity.window.statusBarColor = color
        }
        // 4.4 - 5.0 之间  采用一个技巧，首先把他弄成全屏，在状态栏的部分加一个布局
        else if (Build.VERSION.SDK_INT in Build.VERSION_CODES.KITKAT..Build.VERSION_CODES.LOLLIPOP) {
            // 首先把他弄成全屏，在状态栏的部分加一个布局
//            activity.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
            // 电量 时间 网络状态 都还在
            activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

            // 在状态栏的部分加一个布局 setContentView 源码分析, 自己加一个布局(高度是状态栏的高度)
            val view = View(activity)
            view.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity))
            view.setBackgroundColor(color)

            // decorView是一个FrameLayout布局，会加载一个系统的布局(LinearLayout)，
            // 在系统布局中会有一个id为 android.R.id.content 这布局是(RelativeLayout)
            // activity的布局setContentView就是加载到这个RelativeLayout布局
            val decorView = activity.window.decorView as ViewGroup
            decorView.addView(view)

            // 获取activity中setContentView布局的根布局
            val contentView = activity.findViewById<ViewGroup>(android.R.id.content)
//            contentView.setPadding(0, getStatusBarHeight(activity), 0, 0)
            val activityView = contentView.getChildAt(0)
            activityView.fitsSystemWindows = true
        }
    }

    /**
     * 获取状态栏高度
     */
    private fun getStatusBarHeight(activity: Activity): Int {
        // 插件式换肤：怎么获取资源的，先获取资源id，根据id获取资源
        val res = activity.resources
        val statusBarHeight = res.getIdentifier("status_bar_height", "dimen", "android")
        return res.getDimensionPixelOffset(statusBarHeight)
    }

    /**
     * 设置activity全屏
     */
    fun setActivityTranslucent(activity: Activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // 看源码
            val decorView = activity.window.decorView
            decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            activity.window.statusBarColor = Color.TRANSPARENT
            activity.window.navigationBarColor = Color.TRANSPARENT
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        }
    }
}